/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package poker;

import java.io.Serializable;
import java.util.Vector;
import prop.Configuracion;
import prop.DriverDomainRanking;
import prop.Sesion;

/**
 *
 * @author pol
 */
public class SesionPoker extends Sesion implements Serializable {
    private int numPartidasTot;
    private String textLog;
    private DriverDomainInterfaz ddi;
    private Partida partida;
    private String nombre;

    public void anadirLog(String s) {
        textLog += s + "\n";
        ddi.setLog(textLog);
    }

    public void setDDI(DriverDomainInterfaz ddi) {
        this.ddi = ddi;
    }

    public void unsetDDI() {
        this.ddi = null;
    }
    
    public SesionPoker(Configuracion conf, DriverDomainInterfaz ddi, Vector<JugadorPoker> jugs,
                       int comodines, int partidas, String nom) {
        textLog = "";
        this.ddi = ddi;
        this.conf = conf;
        this.nombre = nom;
        ddi.getSistema().setDDR2(new DriverDomainRanking(Main.rutaProg + nom + ".rnk"));
        ddi.getSistema().ddr2.resetear();
        anadirLog("Se inicia una sesion nueva");
        anadirLog("Nombre de la sesion: " + this.nombre);
        mesa = new MesaPoker(comodines, jugs.size());
        ddi.setMesa((MesaPoker) mesa);
        numPartidas = 0;
        numPartidasTot = partidas;
        int n = jugs.size();
        for (int i = 0; i < n; ++i) {
            JugadorPoker j = jugs.get(i);
            if (j.getClass().getName().equals("poker.JugadorMaquinaPoker")) {
                ((JugadorMaquinaPoker) j).getEstrategia().setMesa(mesa);
                ((JugadorMaquinaPoker) j).getEstrategia().setJugador(j);
            }
            j.setDinero(conf.getInt("SaldoInicial"));
            mesa.anadirJugador(j);
        }
        ddi.setJugando(true);
    }

    public void iniciarPartida() {
        anadirLog("Se inicia la partida " + (getNumPartidas() + 1) + " de " +
                  numPartidasTot);
        partida = new Partida(ddi, (MesaPoker) mesa,this);
        incrNumPartidas();
    }

    public void finalizarPartida() {
        if (getNumPartidas() == numPartidasTot) partida.rank();
        partida = null;
        if (getNumPartidas() < numPartidasTot) {
            ddi.guardarSesion(nombre + ".ses", this);
            ddi.setJugando(true);
            anadirLog("Sesion autoguardada");
            iniciarPartida();
        }
        else ddi.iniciarGanaSesion(mesa.getJugadores());
    }

    public void finSesion() {
        ddi.setJugando(false);
    }

    public void restaura() {
        ddi.getSistema().setDDR2(new DriverDomainRanking(Main.rutaProg + nombre + ".rnk"));
        ddi.setJugando(true);
        anadirLog("Sesion restaurada");
        iniciarPartida();
    }
}
